package com.zx.flow.api.sdk;


import com.zx.flow.api.execute.model.FlowContext;
import com.zx.flow.api.execute.model.FlowNode;
import com.zx.flow.api.execute.request.FlowParamAction;
import com.zx.flow.api.execute.request.FlowParamCancel;
import com.zx.flow.api.execute.request.FlowParamCommunicate;
import com.zx.flow.api.execute.request.FlowParamCommunicateAnswer;
import com.zx.flow.api.execute.request.FlowParamCreate;
import com.zx.flow.api.execute.request.FlowParamSave;
import com.zx.flow.api.execute.request.FlowParamSkip;
import com.zx.flow.api.execute.request.FlowParamStart;
import com.zx.flow.api.execute.request.FlowParamTransfer;
import com.zx.flow.api.execute.request.query.QueryFlowParam;
import com.zx.flow.api.execute.request.query.QueryNodeParam;
import com.zx.flow.api.execute.request.query.QueryNodesParam;
import com.zx.flow.api.execute.response.Response;
import java.util.List;

/**
 * 流程sdk接口。
 * 服务端实现类：FlowV1Controller
 * 客户端实现类：FlowV1Sdk
 */
public interface IFlowSdk {

    public Response<FlowContext> getFlow(QueryFlowParam param);

    public Response<List<FlowNode>> getNodes(QueryNodesParam param);

    public Response<FlowNode> getNode(QueryNodeParam param);

    public Response<FlowContext> create(FlowParamCreate paramCreate);

    public Response<FlowContext> save(FlowParamSave param);

    public Response<FlowContext> start(FlowParamStart param);

    public Response<FlowContext> action(FlowParamAction param);

    public Response<FlowContext> transfer(FlowParamTransfer param);

    public Response<FlowContext> communicate(FlowParamCommunicate param);

    public Response<FlowContext> communicateAnswer(FlowParamCommunicateAnswer param);

    public Response<FlowContext> cancel(FlowParamCancel param);

    public Response<FlowContext> skip(FlowParamSkip param);

}